package com.xu.system.controller;

import com.xu.base.model.BaseSelectVo;
import com.xu.mybatis.model.PageInfo;
import com.xu.system.model.pojo.user.*;
import com.xu.system.service.IUserService;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 用户控制器
 *
 * @Author: 许乾伟
 * @Date: 2024/3/20 16:06
 */
@RestController
@RequestMapping("user")
public class UserController {
    @Autowired
    IUserService userService;

    /**
     * 新增用户
     * @param req 新增用户请求
     * @return true:成功/false:失败
     */
    @PostMapping("add")
    public Boolean add(@Valid @RequestBody AddUserReq req) {
        return userService.add(req);
    }

    /**
     * 编辑用户
     * @param req 编辑用户请求
     * @return true:成功/false:失败
     */
    @PostMapping("edit")
    public Boolean edit(@Valid @RequestBody EditUserReq req) {
        return userService.edit(req);
    }

    /**
     * 修改密码
     * @param req
     * @return
     */
    @PostMapping("changePwd")
    public Boolean changePwd(@Valid @RequestBody ChangePwdReq req) {
        return userService.changePwd(req);
    }

    /**
     * 重置密码
     * @param userId
     * @return
     */
    @PostMapping("resetPwd/{userId}")
    public Boolean resetPwd(@PathVariable("userId") Long userId) {
        return userService.resetPwd(userId);
    }

    /**
     * 删除用户
     * @param userId 用户id
     * @return true:成功/false:失败
     */
    @PostMapping("del/{userId}")
    public Boolean del(@PathVariable("userId") Long userId) {
        return userService.del(userId);
    }

    /**
     * 获取用户详细信息
     * @param userId 用户id
     * @return
     */
    @GetMapping("detail/{userId}")
    public UserVo detail(@PathVariable("userId") Long userId){
        return userService.detail(userId);
    }

    /**
     * 分页查询用户
     * @param req 分页查询用户请求
     * @return 用户信息分页列表
     */
    @GetMapping("page")
    public PageInfo<UserSimpleVo> page(QueryUserReq req){
        return userService.pageInfo(req);
    }

    /**
     * 全用户下拉列表
     * @return
     */
    @GetMapping("allSelectList")
    public List<BaseSelectVo<Long,String>> allSelectList(){
        return userService.allSelectList();
    }
}
